package com.yunxi.service.localService.otd;

import com.yunxi.core.service.IServicePlus;
import com.yunxi.model.otd.OtdOrderSo;
import com.yunxi.otd.pojo.OtdOrderScheduleQueryVO;
import com.yunxi.otd.pojo.OtdOrderSoVO;
import java.util.Date;
import java.util.List;

/**
 * <p>
 * SO生产订单 服务类
 * </p>
 *
 * @author XUQI
 * @since 2019-07-03
 */
public interface OtdOrderSoService extends IServicePlus<OtdOrderSo> {


    /**
     * 生成整车描述
     *
     * @param productCode 产品信息
     * @param customPackCode 选装包
     * @return 整车描述
     */
    String generateCarName(String productCode, String customPackCode);

    /**
     * 分页查询日排程SO订单
     *
     * @param queryVO 查询VO
     * @return 分页对象
     */
    OtdOrderSoVO findSoOrderSchedule(OtdOrderScheduleQueryVO queryVO);

    /**
     * 查询待发送SO排产订单
     *
     * @param orderType 订单类型
     * @param startDate 需求开始时间
     * @param endDate 需求结束时间
     * @return List<OtdOrderSo>
     */
    List<OtdOrderSo> findSendOrderSo(String orderType, Date startDate, Date endDate);


    /**
     * 删除指定日期指定数量的SO需求
     *
     * @param demandDate 需求日期
     * @param productCode 产品编码
     * @param customPackCode 选装包编码
     * @param works 工厂
     * @param orderType 订单类型
     */
    void deleteOverSoOrderByDay(Date demandDate, String productCode, String customPackCode, String works,
        String orderType, int num);

    /**
     * 生成周计划接口JSON
     *
     * @param orderList 待发送so
     * @return JSON
     */
    String generateSapJson(List<OtdOrderSo> orderList);

    /**
     * 根据planNo查询SO订单
     * @param planNo 计划号
     * @return OtdOrderSo
     */
    OtdOrderSo findOrderSoByPlanNo(String planNo);
}
